import {
  passWordRegExp,
  userNameRegExp,
  intRegExp,
  rangeIn,
  publicRegExp
} from "./regExp"
function isInteger(obj) {
  return (obj | 0) === obj
}

// 密码校验规则，大于6位 && 不含有特殊字符
export const validatePassWord = (key, message) => {
  return (rule, value, callback) => {
    if (value.length >= 6) {
      if (!passWordRegExp.test(value)) {
        callback(new Error(`${message}`))
      } else {
        callback()
      }
    } else {
      callback(new Error(`${key}至少输入6个字符`))
    }
  }
}

// 用户
export const validateUserName = (
  key = "用户名",
  message = "用户名只能输入字母、数字并且不能小于4个字符"
) => {
  return (rule, value, callback) => {
    if (!value) {
      callback(new Error(`请输入${key}!`))
    } else {
      if (!userNameRegExp.test(value)) {
        callback(new Error(message))
      } else {
        callback()
      }
    }
  }
}

// 验证网关端口和设备端口
export const validatePort = (key, message) => {
  return (rule, value, callback) => {
    if (!value && value !== 0) callback(new Error(`请输入${key}`))
    else {
      if (!intRegExp.test(value) || !rangeIn(value, 30000, 20001)) {
        callback(new Error(message))
      } else {
        callback()
      }
    }
  }
}

export const validatePublic = (key, message) => {
  return (rule, value, callback) => {
    if (!value) callback(new Error("请输入" + key))
    else {
      if (publicRegExp.test(value)) callback(new Error(message))
      else callback()
    }
  }
}

export const validateGatewayCode = (key, message) => {
  return (rule, value, callback) => {
    if (!value && value !== 0) callback(new Error("请输入" + key))
    else {
      if (isInteger(value) && (value >= 1 && value <= 255)) {
        callback()
      } else {
        callback(new Error(message))
      }
    }
  }
}

export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}
